package com.itextpdf.tool.xml.examples; import com.itextpdf.testutils.ITextTest; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.FontProvider; import com.itextpdf.text.PageSize; import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.Pipeline; import com.itextpdf.tool.xml.XMLWorker; import com.itextpdf.tool.xml.XMLWorkerFontProvider; import com.itextpdf.tool.xml.XMLWorkerHelper; import com.itextpdf.tool.xml.css.CssFilesImpl; import com.itextpdf.tool.xml.css.StyleAttrCSSResolver; import com.itextpdf.tool.xml.html.CssAppliersImpl; import com.itextpdf.tool.xml.html.Tags; import com.itextpdf.tool.xml.parser.XMLParser; import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline; import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline; import com.itextpdf.tool.xml.pipeline.html.AbstractImageProvider; import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline; import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext; import com.itextpdf.tool.xml.pipeline.html.ImageProvider; import org.junit.Assert; import org.junit.Test; import java.io.*; import java.nio.charset.Charset; public class SampleTest extends ITextTest { protected String inputPath; protected String testPath; protected String outPath; protected String inputHtml; private final String differenceImagePrefix = "difference"; public void setup() throws IOException { testPath = this.getClass().getPackage().getName().replace(".", "/"); outPath = String.format("./target/%s/%s/", testPath, getTestName()); inputPath = String.format("./src/test/resources/%s/%s/", testPath, getTestName()); inputHtml = String.format("%s%s.html", inputPath, getTestName()); File dir = new File(outPath); if (dir.exists()) deleteFiles(dir); else dir.mkdirs(); } @Test(timeout = 120000) public void test() throws Exception { if (!this.getClass().getName().equals(SampleTest.class.getName()) && (getTestName().length() > 0)) { setup(); super.runTest(); } } @Override protected void makePdf(String outPdf) throws Exception { Document doc = new Document(PageSize.A4); PdfWriter pdfWriter = PdfWriter.getInstance(doc, new FileOutputStream(outPdf)); doc.open(); transformHtml2Pdf(doc, pdfWriter, new SampleTestImageProvider(), new XMLWorkerFontProvider(SampleTest.class.getResource("fonts").getPath()), SampleTest.class.getResourceAsStream("sampleTest.css")); doc.close(); } @Override protected String getOutPdf() { return String.format("%s%s.pdf", outPath, getTestName()); } @Override protected String getCmpPdf() { return String.format("%s%s.pdf", inputPath, getTestName()); } @Override protected void comparePdf(String outPdf, String cmpPdf) throws Exception { if (!detectCrashesAndHangUpsOnly()) { CompareTool compareTool = new CompareTool(); String errorMessage = compareTool.compareByContent(outPdf, cmpPdf, outPath, differenceImagePrefix); if (errorMessage != null) { Assert.fail(errorMessage); } } } protected String getTestName() { return ""; } protected boolean detectCrashesAndHangUpsOnly() { return false; } protected class SampleTestImageProvider extends AbstractImageProvider { final String imageRootPath; public SampleTestImageProvider() { imageRootPath = String.format("./target/test-classes/%s/%s/", testPath, getTestName()); } public String getImageRootPath() { return imageRootPath; } } protected void transformHtml2Pdf(Document doc, PdfWriter pdfWriter, ImageProvider imageProvider, FontProvider fontProvider, InputStream cssFile) throws IOException, DocumentException, InterruptedException { CssFilesImpl cssFiles = new CssFilesImpl(); if (cssFile == null) cssFile = SampleTest.class.getResourceAsStream("/default.css"); cssFiles.add(XMLWorkerHelper.getCSS(cssFile)); StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles); HtmlPipelineContext hpc; if (fontProvider != null) hpc = new HtmlPipelineContext(new CssAppliersImpl(fontProvider)); else hpc = new HtmlPipelineContext(null); hpc.setImageProvider(imageProvider); hpc.setAcceptUnknown(true).autoBookmark(true).setTagFactory(Tags.getHtmlTagProcessorFactory()); HtmlPipeline htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, pdfWriter)); Pipeline<?> pipeline = new CssResolverPipeline(cssResolver, htmlPipeline); XMLWorker worker = new XMLWorker(pipeline, true); XMLParser xmlParse = new XMLParser(true, worker, Charset.forName("UTF-8")); xmlParse.parse(new FileInputStream(inputHtml), Charset.forName("UTF-8")); } }